/**
 * 等待...
 * @param {activity className} activity 
 * @param {时间} period 
 * @param {时间} timeout 
 * @returns 结果
 */
global.waitForActivity = function (activity, period, timeout) {
    period = period || 200
    timeout = timeout || 20000
    const startTime = new Date().getTime()
    while (currentActivity() !== activity) {
        if (new Date().getTime() - startTime >= timeout) {
            return false
        }
        sleep(period)
    }

    return true
}

/**
 * 根据包名获取应用
 * @param {包名} packageName 
 * @returns 包含方法的对象
 */
global.getAppByPackageName = function (packageName) {
    if (!packageName) toast('缺少包名')
    return {
        launch() {
            launch(packageName)
            sleep(1000)
            if (currentPackage() === 'com.miui.securitycenter') {
                click('允许')
            }
        },
        close() {
            sleep(2000)
            app.openAppSetting(packageName)
            text(app.getAppName(packageName)).waitFor()
            const isSure = textMatches(/(.*强.*|.*停.*|.*结.*|.*行.*)/).findOne()
            if (isSure.enabled()) {
                // textMatches(/.*停止.*/).findOne().click()
                const finish = textMatches(/(.*强.*|.*停.*|.*结.*|.*行.*)/).findOne()
                click(finish.bounds().centerX(), finish.bounds().centerY())

                textMatches(/(.*确.*|.*定.*)/).findOne().click()
                log(app.getAppName(packageName) + '应用已被关闭')
                sleep(1000)
                back()
            } else {
                log(app.getAppName(packageName) + '应用不能被正常关闭或不在后台运行')
                back()
            }
        }
    }
}

/**
 * 某些组件的clickable为false的情况下使用
 * @param {点击的控件} widget 
 * @param {点击后的延迟} delay
 */
global.clickWidget = function (widget, delay) {
    if (widget) {
        click(widget.bounds().centerX(), widget.bounds().centerY())
        sleep(delay)
    }
}

/**
 * 唤醒并解锁
 * @param {解锁密码} unlockPassword 
 */
global.wakeUpAndUnlock = function (unlockPassword) {
    const keyboard = [];
    if (!device.isScreenOn()) {
        device.wakeUp();
        sleep(2000);
    }

    if (context.getSystemService(context.KEYGUARD_SERVICE).isKeyguardLocked()) {
        gesture(220, [540, 1400], [540, 500]);
        sleep(2000);
        for (let i = 0; i < 10; i++) {
            keyboard.push(id('key' + i).findOnce());
        }

        for (let i = 0; i < unlockPassword.length; i++) {
            keyboard[+unlockPassword[i]].click();
            sleep(500);
        }

        sleep(1000);
    }
}
//////////////////////////////////////////////
//////////////////////////////////////////////

// 覆盖解锁屏方法
global.wakeUpAndUnlock = function (unlockPassword) {
    if (!device.isScreenOn()) {
        device.wakeUp();
        sleep(2000);
        gesture(220, [540, 1400], [540, 500]);
    }
}

// ------------------------
// 进入赚钱页面
function launch_event() {
    className('androidx.appcompat.app.ActionBar$c')
        .desc('去赚钱')
        .findOne()
        .click()

    //click(520, 1300)
    console.log('进入赚钱页面')
    sleep(15000)

    // 提示看视频得金币
    if (className('TextView').text('看视频最高得').exists()) {
        sleep(2000)
        clickWidget(
            className('TextView')
                .text('看视频最高得')
                .findOne(),
            30 * 1000)

        //back()
        console.log('观看[看视频最高得]视频')

        //while(!text('坚持退出').exists()){
        back()
        sleep(1000)
        //}

        if (text('坚持退出').exists()) {
            console.log('退出[坚持退出]弹窗')
            clickWidget(text('坚持退出').findOne(), 1000)
        }
    }
}



const tasks = [
    {
        name: "签到",
        run: function (app) {
            // 青少年提醒
            if (text("我知道了").exists()) {
                clickWidget(text("我知道了").findOne(), 1000)
                console.log('关闭[青少年提醒]弹窗')
            }

            if (id("close_btn").exists()) {
                id("close_btn").findOne().click()
            }

            launch_event()
            app.close()
            console.log('退出应用')
        }
    },
    {
        name: "刷视频",
        run: function (app) {
            if (id("close_btn").exists()) {
                id("close_btn").findOne().click()
            }

            // 提示看视频得金币
            if (className('TextView').text('看视频最高得').exists()) {
                sleep(2000)
                clickWidget(
                    className('TextView')
                        .text('看视频最高得')
                        .findOne(),
                    40 * 1000)

                //back()
                console.log('观看[看视频最高得]视频')

                //while(!text('坚持退出').exists()){
                back()
                sleep(2000)
                //}

                if (text('坚持退出').exists()) {
                    console.log('退出[坚持退出]弹窗')
                    clickWidget(text('坚持退出').findOne(), 1000)
                }
            }

            // 朋友推荐
            if(id('close_btn').exists()){
                id('close_btn').findOne().click()
            }

            // 双倍
            if (id("expand_btn_icon").exists()) {
                clickWidget(
                    id("expand_btn_icon")
                        .findOne(),
                    500
                )
            }

            // 双倍
            if (id("expand_btn_container").exists()) {
                clickWidget(
                    id("expand_btn_container")
                        .findOne(),
                    500
                )
            }

            if (id("expand_btn_text").exists()) {
                clickWidget(
                    id("expand_btn_text")
                        .findOne(),
                    500
                )
            }

            // 滑动1.5小时
            var delay_seconds = 8, count = (50 * 60) / 8
            for (var i = 0; i < count; i++) {
                // 刷视频提示红包
                if (className('TextView').text('继续观看领红包').exists()) {
                    clickWidget(
                        className('TextView')
                            .text('继续观看领红包')
                            .findOne(),
                        500)
                    console.log('弹窗[继续观看领红包]')
                }

                gesture(200, [400, 1000], [400, 200])

                // 非长图、图文
                if (!id('pic_text').exists()) {
                    sleep(delay_seconds * 1000)
                }
            }

            console.log('刷视频1.5小时')
            app.close()
            console.log('退出应用')
        }
    }
]



// 运行所有任务
tasks.filter((task) => [
    "刷视频",
    "签到"
].indexOf(task.name) !== -1)

    .forEach(task => {

        // 1. 解锁屏幕
        wakeUpAndUnlock()
        sleep(2000)

        // 2. 开始运行任务
        console.log("\n=============\nSTART: " + task.name)

        // 3. 启动应用
        const app = getAppByPackageName('com.kuaishou.nebula')
        app.launch()
        waitForActivity('com.yxcorp.gifshow.HomeActivity')
        sleep(5000)

        task.run(app)
        console.log("\nEND: " + task.name + "\n=============")
    });

//
